package com.zmn.brs.business.interfaces.rule;

import com.zmn.brs.model.bo.rule.CustomRuleBO;
import com.zmn.brs.model.entity.event.Event;
import com.zmn.brs.model.query.rule.EngineerRuleCustomQuery;
import com.zmn.brs.model.query.rule.OrderRuleCustomQuery;

import java.util.List;

/**
 * 描述: 规则基础接口类
 *
 * @author chongw
 * @since  2021-06-24 15:55:07
 **/
public interface AlarmRuleBService<T> {

    /**
     * 根据事件Id查询规则信息
     * @param eventId
     * @return
     */
    Integer findRuleIdByEventId(Integer eventId);

    /**
     * 按条件查询数据 支持分页
     * @param query 查询对象
     * @return java.util.List<com.zmn.brs.model.bo.rule.CustomRuleBO>
     * @throws
     * @author chongw
     * @since 2021/06/24 11:17
     */
    List<CustomRuleBO> listPageOrderRuleByEventQuery(OrderRuleCustomQuery query);

    /**
     * 按条件查询数据 支持分页
     * @param query 查询对象
     * @return java.util.List<com.zmn.brs.model.bo.rule.CustomRuleBO>
     * @throws
     * @author chongw
     * @since 2021/06/24 11:17
     */
    List<CustomRuleBO> listPageRuleByEventQuery(EngineerRuleCustomQuery query);

    /**
     * 按条件查询数据 不支持分页
     * @param query 查询对象
     * @return java.util.List<com.zmn.brs.model.bo.rule.CustomRuleBO>
     * @throws
     * @author chongw
     * @since 2021/06/24 11:17
     */
    List<CustomRuleBO> listOrderRuleByEventQuery(OrderRuleCustomQuery query);

    /**
     * 按条件查询数据 不支持分页
     * @param query 查询对象
     * @return java.util.List<com.zmn.brs.model.bo.rule.CustomRuleBO>
     * @throws
     * @author chongw
     * @since 2021/06/24 11:17
     */
    List<CustomRuleBO> listRuleByEventQuery(EngineerRuleCustomQuery query);

    /**
     * 校验规则是否存在
     * @param query
     * @return
     */
    Integer countOrderRuleExistByQuery(OrderRuleCustomQuery query);

    /**
     * 校验规则是否存在
     * @param query
     * @return
     */
    Integer countRuleExistByQuery(EngineerRuleCustomQuery query);

    /**
     * 保存事件公共阈值
     * @param event
     * @return
     */
    Integer upsertEventCommonRule(Event event);

    /**
     * 缓存监控规则配置
     * @param redisKey
     * @param eventId
     * @param thresholdId
     */
    void cacheRule(String redisKey, Integer eventId, Integer thresholdId);

    /**
     * 缓存监控规则配置
     * @param redisKey
     * @param oldRedisKey
     * @param eventId
     * @param thresholdId
     */
    void cacheRule(String redisKey, String oldRedisKey, Integer eventId, Integer thresholdId);

    /**
     * 缓存监控规则公共阈值配置
     * @param redisKey
     * @param value
     */
    void cacheCommonRule(String redisKey, String value);

    /**
     * 初始化缓存监控规则
     * @author chongw
     * @since  2021-06-30 14:55:07
     */
    void initCacheRule();

}

